<?php

namespace app\model;

use support\Model;

/**
 * 卡片项目模型
 * 
 * 该模型用于管理卡片项目信息，包括：
 * - 卡片的基本信息（卡号、密码）
 * - 卡片的使用状态和过期天数
 * - 福豆数量管理
 * 
 * 数据库表结构：
 * - card_id: 卡ID
 * - card_number: 卡密
 * - card_no: 卡号
 * - expired_days: 过期天数(0表示永不过期)
 * - status: 状态 (0=未使用, 1=已使用)
 * - score: 福豆数
 * - created_at: 创建时间
 * - updated_at: 更新时间
 */
class CardItemModel extends Model
{
    /**
     * 关联表名
     * @var string
     */
    protected $table = 'card_item';

    /**
     * 主键
     * @var string
     */
    protected $primaryKey = 'id';

    /**
     * 关闭自动时间戳
     * @var bool
     */
    public $timestamps = false;

    /**
     * 可批量赋值字段
     * @var array
     */
    protected $fillable = [
        'card_id',
        'card_number',
        'card_no',
        'status',
        'expired_days',
        'score',
        'created_at',
        'updated_at'
    ];

    /**
     * 隐藏字段
     * @var array
     */
    protected $hidden = [
        'card_no'
    ];

    protected $guarded = [];

    /**
     * 状态常量
     */
    const STATUS_INACTIVE = 0;    // 未激活
    const STATUS_ACTIVE = 1;      // 已激活
    const STATUS_EXPIRED = 2;   // 已过期

    /**
     * 获取状态文本
     * @param int $status
     * @return string
     */
    public static function getStatusText($status)
    {
        $statusMap = [
            self::STATUS_INACTIVE => '未激活',
            self::STATUS_ACTIVE => '已激活',
            self::STATUS_EXPIRED => '已过期'
        ];
        return $statusMap[$status] ?? '未知状态';
    }

    /**
     * 生成卡密
     * @return string
     */
    public static function generateCardNumber()
    {
        // 去除易混淆字符：0, O, o, I, l, 1
        $characters = 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz23456789';
        $cardNumber = '';
        for ($i = 0; $i < 12; $i++) {
            $cardNumber .= $characters[random_int(0, strlen($characters) - 1)];
        }
        return $cardNumber;
    }

    /**
     * 生成卡号
     * @return string
     */
    public static function generateCardNo()
    {
        return strtoupper(substr(md5(uniqid()), 0, 6));
    }

    public function beautifyCardNumber()
    {
        // 将12位卡密每4位加一个空格，便于美观显示
        if (empty($this->card_number) || strlen($this->card_number) !== 12) {
            return $this->card_number;
        }
        return implode(' ', str_split($this->card_number, 4));
    }
} 